--- title: "L1-006 连续因子" created: 2025-11-28 tags: - 算法 --- # L1-006 连续因子 ## 题目 [连续因子](https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=994805138600869888) ![[image-3310688a.png]] ## 思路分析 ![[image-450cb220.png]] 但是有坑 不要用除法 把除法转变成乘法去做 用 `product * j` 代替 `s[r] / s[l - 1]` ## 代码实现 ```cpp #include using namespace std; #define endl '\n' typedef long long LL; const LL N=2e6; LL s[N]; int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); s[1]=1; for(int i=2;i<=13;i++){ s[i]=s[i-1]*i; // if(s[i]>N) break; } // for(int i=0;i<=14;i++) cout<>n; LL maxLen = 0, start = 0; // for (int l = 2; l <= 13; l++) { // for (int r = l; r <= 13; r++) { // if (s[r] / s[l - 1] > n) break; // if (n % (s[r] / s[l - 1]) == 0) { // if (r - l + 1 > maxLen) { // maxLen = r - l + 1; // start = l; // } // } // } // } for (LL l = 2; l <= sqrt(n); l++) { LL product = 1; for (LL r = l; r <= n; r++) { product *= r; if (product > n) break; if (n % product == 0) { LL length = r - l + 1; if (length > maxLen) { maxLen = length; start = l; } } } } if (maxLen == 0) { cout << "1\n" << n << endl; } else { cout << maxLen << endl; for (int i = 0; i < maxLen; i++) { cout << (i == 0 ? "" : "*") << (start + i); } cout << endl; } return 0; } ``` ## 同类题型 ## 视频讲解 --- ⬅️ [[L1-005 考试座位号|L1-005 考试座位号]] 🏠 [[00-天梯赛]] ➡️ [[L1-007 念数字|L1-007 念数字]]